iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0

前言

昨天有提到,ROS 架構下最常是用的文件系統就是 Package,而在 Package 當中又能劃分出更細的工作 (例如資料獲取、分析計算等等 ),因此,筆者在這邊先大概介紹整個 ROS 的運作系統,以下是示意圖:
https://ithelp.ithome.com.tw/upload/images/20200922/20129807spd8WNQQXI.png

這邊舉一個較為具體的說明,首先我們把 Node 想像是人, Publisher 是傳 Line 的人,Subscriber 是接收 Line 的人,而 Topic 就是聊天的主題,聊天的訊息內容則是 Message,最後 ROS master 可以理解為 Line 的伺服器。所以,ROS 架構下最小的單元其實是 Node。不同的 Nodes 之間可以透過主題 (Topic) 以及訊息 (Message) 來交換所需的 Data,而負責管理所有節點之間交換訊息的則是 Master,往後幾天我們也會逐步介紹這些東西,那麼現在就開始進入今天的主題 — Node 的介紹。

What is node?

有了 Package 分工了,還需要再建立 Nodes 的理由,其包含以下幾個特點:

  1. 提高程式的穩定度:單一 Node 被毀損時不太容易影響到其他的 Nodes。
  2. 降低程式的複雜度:一個 ROS 專案可以拆分出許多 Nodes 來負責不同的工作項目再予以整合,達到方便管理的效果。
  3. 可透過不同語言撰寫:不同的 Nodes 之間可以使用不同的程式語言來撰寫,如: C、 Python、 Java 等,可因應不同的需求選擇適合的語言。

即使已經將一個龐大的專案分成許多的 Package 來運行,但是在每個 Package 中可能又能劃分出更多更微小的工作,如同現在社會結構,精密的分工,達到社會資源區愈趨向均衡,機器人的運作也是如此。例如某些 Nodes 負責接收數據,而某些負責發送數據等等,妥善的運用 Node 的優點,能夠讓整個專案更有效的管理、運行與維護。

Using Python to write a node.

了解 Node 的基本概念後,緊接著就來實作一個 Node 並且運行吧!上面有提到 Node 可以使用許多語言來撰寫,以下便是利用 Python 編寫 Node 的方法。首先先在昨天建立好的 Package 下創建一個 hello.py 檔:

roscd beginner_tutorial/src/
touch hello.py
vi touch hello.py

接著在裡面輸入程式,記得使用 vi 編輯檔案時,要按 i 才會進入編輯模式:

#!/usr/bin/env python
import rospy
rospy.init_node(‘hello_node’)
rospy.loginfo(‘Hello World’)

簡單的解釋一下 code 內容:

#!/usr/bin/env python          # 告訴系統該檔案為 Python 檔。
import rospy                   # 導入 rospy 這個 class。
rospy.init_node(‘hello_node’)  # 初始化一個名叫 hello_node 這個 node。
rospy.loginfo(‘Hello World’)   # 在 Terminal 上印出 Hello World。

補充說明:
/usr(unix software resource) 放置系統相關軟體服務資料夾
/bin 放置主要應用工具必備執行檔 例:c++, g++, python...等
/env 環境配置參數存放

接著就直接在 Terminal 上輸入 python hello.py,不過得注意的是,必須在此檔案所在的資料夾下才能用該指令 python [file_name] 執行,否則系統會找不到檔案!
https://ithelp.ithome.com.tw/upload/images/20200922/20129807zT0ojE8crb.png

而會產生這個錯誤其實上面有隱約提到,是因為目前這個 Node 還缺少了一個 Master 來管理他,雖然這個 Node 並沒有與其他 Nodes 交換訊息的需求,但基本上運行任何 Node 之前都必須先執行一個 Master,因此我們先執行 roscore 這個指令。

接著,由於 Node 執行的過程中都必須要有 Master 的存在,所以我們必須再新增一個 Terminal,重新輸入 python hello.py,以下是成功執行這個 Node 的結果:
https://ithelp.ithome.com.tw/upload/images/20200922/20129807mkXUeVkQBb.png

結語

不知道這次介紹結束後,大家對 Node 的概念有沒有一些基本的認知呢?熟悉 Node 是 ROS 當中非常重要且基本的一環,因此,明天的主題仍然會與 Node 相關,請大家敬請期待!!
https://ithelp.ithome.com.tw/upload/images/20200922/20129807giHUd3PPAy.png


上一篇
[DAY 6] ROS Package的建置
下一篇
[DAY 8] ROS Node的執行與測試
系列文
ROS系統控制自走車搭配點雲雷達(隧道檢測裝置)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言